window: reset both press/drag gestures when move/resize drag starts
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 10 Mar 2015 15:38:17 +0000 (16:38 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 10 Mar 2015 15:48:16 +0000 (16:48 +0100)
Now that this is split in two separate gestures, both must be reset
when the WM grabs the pointer. Also, do on resize drags like on move
drags, and claim the gesture before resetting, so the ownership is
properly transferred across any other widgets.

https://bugzilla.gnome.org/show_bug.cgi?id=745969

gtk/gtkwindow.c

index 7dee0dfc4147233f694270f4d59e7066d6ee4faa..1cac7b39c150f3daf5b99fabd052955f253dc94f 100644 (file)
@@ -1487,6 +1487,8 @@ multipress_gesture_pressed_cb (GtkGestureMultiPress *gesture,
         {
           gdouble x_root, y_root;
 
+          gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
+
           gdk_event_get_root_coords (event, &x_root, &y_root);
           gdk_window_begin_resize_drag_for_device (gtk_widget_get_window (widget),
                                                    (GdkWindowEdge) region,
@@ -1494,6 +1496,9 @@ multipress_gesture_pressed_cb (GtkGestureMultiPress *gesture,
                                                    GDK_BUTTON_PRIMARY,
                                                    x_root, y_root,
                                                    gdk_event_get_time (event));
+
+          gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
+          gtk_event_controller_reset (GTK_EVENT_CONTROLLER (priv->drag_gesture));
         }
 
       break;
@@ -1528,6 +1533,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
                         gdouble         offset_y,
                         GtkWindow      *window)
 {
+  GtkWindowPrivate *priv = window->priv;
   gint double_click_distance;
   GtkSettings *settings;
 
@@ -1579,6 +1585,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
                                              gtk_get_current_event_time ());
 
       gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
+      gtk_event_controller_reset (GTK_EVENT_CONTROLLER (priv->multipress_gesture));
     }
 }